﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Insifo.WE;
using System.Text.RegularExpressions;
using System.Collections.Specialized;


public partial class genCompaniaEditar : ObjectPage
{
    #region CONSTANTES

    private const string RUTA_LISTA = "~/gen/genCompaniaListar.aspx";

    #endregion

    #region EVENTOS

    protected void Page_Load(object sender, EventArgs e)
    {
        //Eventos del Master
        Master.MenuAccionEvento += new MasterPageMenuEditarClickHandler(Master_MenuButton);
        if (!IsPostBack)
        {            
            Cargar();
        }
    }

    protected void Master_MenuButton(object sender, EventArgs e)
    {
        string strAccion = ((CommandEventArgs)e).CommandName;
        switch (strAccion)
        {
            case "Aceptar":
                Guardar("G");
                break;
            case "Aplicar":
                Guardar("A"); 
                break;
            case "Cancelar":
                Salir();
                break;
        }
    }

    protected void ddlPais_SelectedIndexChanged(object sender, EventArgs e)
    {
        CargarDepartamento(ddlPaisRegistroCompania, ddlDepartamentoRegistroCompania);
    }

    protected void ddlDepartamento_SelectedIndexChanged(object sender, EventArgs e)
    {
        CargarProvincias(ddlDepartamentoRegistroCompania, ddlProvinviaRegistroCompania);
    }

    protected void ddlPaisPersona_SelectedIndexChanged(object sender, EventArgs e)
    {
        CargarDepartamento(ddlPaisRegistroPersona, ddlDepartamentoRegistroPersona);
    }

    protected void ddlDepartamentoPersona_SelectedIndexChanged(object sender, EventArgs e)
    {
        CargarProvincias(ddlDepartamentoRegistroPersona, ddlProvinciaRegistroPersona);
    }
    #endregion

    #region METODOS

    protected void Cargar()
    {
        string strAccion = Request.QueryString["a"];   //a: N-Nuevo, e-Editar, v-Ver
        string strId = Request.QueryString["i"];  //Id

        //Inicializa Buscador de Persona
        ucPersonaSel.Inicializar("S", "", "", "");

        //TipoCompania
        Util.loadComboAndItem(ddlTipoCompania, ListarParametroDetalle(1, 1, Constantes.PARAMETRO_TIPOCOMPANIA), "Descripcion", "ParametroDetalle", string.Format("--{0}--", Resources.resDiccionario.Seleccione), string.Empty);
        //Estado
        Util.loadCombo(ddlEstado, ListarParametroDetalle(1, 1, Constantes.PARAMETRO_ESTADOREGISTRO), "Descripcion", "ParametroDetalle");
        //Pais de Registro Legal Persona y Compania
        Util.loadComboAndItem(ddlPaisRegistroCompania, ListarPais(), "Descripcion", "IdPais", string.Format("--{0}--", Resources.resDiccionario.Seleccione), "0");
        Util.loadComboAndItem(ddlPaisRegistroPersona, ListarPais(), "Descripcion", "IdPais", string.Format("--{0}--", Resources.resDiccionario.Seleccione), "0");
        //Departamento de Registro Legal Persona y Compania
        ddlDepartamentoRegistroCompania.Items.Insert(0, new ListItem(string.Format("--{0}--", Resources.resDiccionario.Seleccione), "0"));
        ddlDepartamentoRegistroPersona.Items.Insert(0, new ListItem(string.Format("--{0}--", Resources.resDiccionario.Seleccione), "0"));
        //Provinvia
        ddlProvinviaRegistroCompania.Items.Insert(0, new ListItem(string.Format("--{0}--", Resources.resDiccionario.Seleccione), "0"));
        ddlProvinciaRegistroPersona.Items.Insert(0, new ListItem(string.Format("--{0}--", Resources.resDiccionario.Seleccione), "0"));
        switch (strAccion)
        {
            case "n":
                Master.SubTitulo.Text = Resources.resDiccionario.Nuevo;
                Nuevo();
                break;
            case "e":
                Master.SubTitulo.Text = Resources.resDiccionario.Editar;
                Editar(strAccion, strId);
                break;
            case "d":
                Master.SubTitulo.Text = Resources.resDiccionario.Inactivar;
                Editar(strAccion, strId);
                break;
            default:
                Master.SubTitulo.Text = Resources.resDiccionario.Unknow;
                break;
        }

        Master.MenuAceptar.Attributes.Add("onClick", "fnConfirmarCompaniaGenerico();");  //Confirmar Compania Generico.
        Master.MenuAplicar.Attributes.Add("onClick", "fnConfirmarCompaniaGenerico();");

    }

    private void CargarDepartamento(DropDownList ddlPais, DropDownList ddlDepartamento)
    {
        int intIdPais = 0;
        int.TryParse(ddlPais.SelectedValue, out intIdPais);
        Util.loadComboAndItem(ddlDepartamento, ListarDepartamentos(intIdPais), "Descripcion", "IdDepartamento", string.Format("--{0}--", Resources.resDiccionario.Seleccione), "0");
    }

    private void CargarProvincias(DropDownList ddlDepartamento, DropDownList ddlProvincia)
    {
        int intIdDepartamento = 0;
        int.TryParse(ddlDepartamento.SelectedValue, out intIdDepartamento);
        Util.loadComboAndItem(ddlProvincia, ListarProvincias(intIdDepartamento), "Descripcion", "IdProvincia", string.Format("--{0}--", Resources.resDiccionario.Seleccione), "0");
    }

    protected void CargarFoto(int pnIdCompania)
    {
        if (pnIdCompania > 0)
        {
            WCCompania.BECompania be = new WCCompania.BECompania
            {
                IdCompania = pnIdCompania
            };
            be = ObtenerCompania(be);
            if (be.ImagenLogo != null)
                imgLogo.ImageUrl = "~/ashx/ashCompania.ashx?id=" + be.IdCompania;
        }
    }

    protected Byte[] ConvertirArchivo(FileUpload pFileUp)
    {

        //Foto
        FileUpload doc = (FileUpload)pFileUp;
        Byte[] imgByte = null;
        if (pFileUp.PostedFile != null && pFileUp.PostedFile.ContentLength > 0)
        {
            if (doc.HasFile && doc.PostedFile != null)
            {
                //To create a PostedFile
                HttpPostedFile File = pFileUp.PostedFile;
                //Create byte Array with file len
                imgByte = new Byte[File.ContentLength];
                //force the control to load data in array
                File.InputStream.Read(imgByte, 0, File.ContentLength);
            }
        }
        return imgByte;
    }

    protected void Nuevo()
    {
        //Coloca el asterico de requeridos
        rfvCodigoCompania.Validate();
        rfvDescripcion.Validate();
        rfvTipoCompania.Validate();

        hfIdCompania.Value = "0";
        hfAccion.Value = "n"; //Nuevo
        txtIdCompania.Text = string.Empty;
        //txtCodigoDepa.Text = string.Empty;
        txtDescripcion.Text = string.Empty;
        txtCodigoCompania.Text = string.Empty;
        txtLogo.Text = string.Empty;
        txtPaginaWeb.Text = string.Empty;
        txtRepresentanteLegal.Text = string.Empty;
        txtRepresentanteLegalDoc.Text = string.Empty;
        ddlTipoCompania.SelectedIndex = 0;
        ddlPaisRegistroCompania.SelectedIndex = 0;
        ddlDepartamentoRegistroCompania.SelectedIndex = 0;
        ddlProvinviaRegistroCompania.SelectedIndex = 0;
        txtFechaRegistroCompania.Text = string.Empty;
        ddlPaisRegistroPersona.SelectedIndex = 0;
        ddlDepartamentoRegistroPersona.SelectedIndex = 0;
        ddlProvinciaRegistroPersona.SelectedIndex = 0;
        txtFechaRegistroPersona.Text = string.Empty;
        txtNemonico.Text = string.Empty;

        //Datos de Auditoria
       // ddlIdPais.SelectedIndex = 0; //Representa el primero
        ddlEstado.SelectedIndex = 0; //Representa el primero
        txtUsuarioCreacion.Text = string.Empty;
        txtFechaCreacion.Text = string.Empty;
        txtUsuarioModificacion.Text = string.Empty;
        txtFechaModificacion.Text = string.Empty;
    }
    
    protected void Editar(string pstrAccion, string pstrIdCompania)
    {       
        WCCompania.BECompania be = new WCCompania.BECompania
        {
            IdCompania = Int32.Parse(pstrIdCompania)
        };
        be = ObtenerCompania(be);

        hfIdCompania.Value = pstrIdCompania;
        hfAccion.Value = pstrAccion; //Editar/Eliminarç

        txtIdCompania.Text = be.IdCompania.ToString();        
       
        txtCodigoCompania.Text = be.CodigoCompania;
        txtLogo.Text = be.Logo;
        txtDescripcion.Text = be.Descripcion;
        //txtRepresentanteLegal.Text = be.RepresentanteLegal;
        //txtRepresentanteLegalDoc.Text = be.RepresentanteLegalDocumento;
        txtPaginaWeb.Text = be.PaginaWeb;
        cbxRetencionIGV.Checked = be.RetencionIGV == Constantes.ESTADO_SI ? true : false;
        cbxRTPS.Checked = be.RTPS == Constantes.ESTADO_SI ? true : false;
        cbxCreditoFiscal.Checked = be.CreditoFiscal == Constantes.ESTADO_SI ? true : false;
        cbxAfectoIGV.Checked = be.AfectoIGV == Constantes.ESTADO_SI ? true : false;
        cbxGeneral.Checked = be.General == Constantes.ESTADO_SI ? true : false;
        Util.SelectCombo(ddlPaisRegistroCompania, be.IdPaisRegistro.ToString());
        CargarDepartamento(ddlPaisRegistroCompania,ddlDepartamentoRegistroCompania);
        Util.SelectCombo(ddlDepartamentoRegistroCompania, be.IdDepartamentoRegistro.ToString());
        CargarProvincias(ddlDepartamentoRegistroCompania, ddlProvinviaRegistroCompania);
        Util.SelectCombo(ddlProvinviaRegistroCompania, be.IdProvinciaRegistro.ToString());
        txtFechaRegistroCompania.Text =  be.FechaRegistro == null ? string.Empty : ((DateTime)be.FechaRegistro).ToString(AppSettings.FormatoFecha);
        txtTomoRegistroCompania.Text = be.TomoRegistroLegal;
        txtNemonico.Text = be.Nemonico;
        
        if (be.IdPersona > 0)
        {
            txtIdCliente.Text = be.IdPersona.Equals(0) ? string.Empty : be.IdPersona.ToString();
            hfIdPersona.Value = be.IdPersona.ToString();

            WCPersona.BEPersona bePer = ObtenerPersona((int)be.IdPersona);
            txtNombreBusqueda.Text = bePer.NombreCompleto;
            hfNombrePersona.Value = bePer.NombreCompleto;

        }

        //Representante Legal
        if (be.IdPersonaLegal > 0)
        {
            txtIdPersonaLegal.Text = be.IdPersonaLegal.Equals(0) ? string.Empty : be.IdPersonaLegal.ToString();
            hfIdPersonaLegal.Value = be.IdPersonaLegal.ToString();

            WCPersona.BEPersona bePer = ObtenerPersona((int)be.IdPersona);
            txtNombrePersonaLegal.Text = bePer.NombreCompleto;
            hfNombrePersonaLegal.Value = bePer.NombreCompleto;

        }
        Util.SelectCombo(ddlPaisRegistroPersona, be.IdPaisRegistroPersona.ToString());
        CargarDepartamento(ddlPaisRegistroPersona, ddlDepartamentoRegistroPersona);
        Util.SelectCombo(ddlDepartamentoRegistroPersona, be.IdDepartamentoRegistroPersona.ToString());
        CargarProvincias(ddlDepartamentoRegistroPersona, ddlProvinciaRegistroPersona);
        Util.SelectCombo(ddlProvinciaRegistroPersona, be.IdProvinciaRegistroPersona.ToString());
        txtFechaRegistroPersona.Text = be.FechaRegistroPersona == null ? string.Empty : ((DateTime)be.FechaRegistroPersona).ToString(AppSettings.FormatoFecha);
        txtTomoRegistroPersona.Text = be.TomoRegistroPersona;

        //TipoCompania
        Util.SelectCombo(ddlTipoCompania, be.TipoCompania);
        //Datos de Auditoria
        Util.SelectCombo(ddlEstado,be.Estado);
        
        txtUsuarioCreacion.Text = be.UsuarioCreacion;
        txtFechaCreacion.Text = be.FechaCreacion.ToString(AppSettings.FormatoFechaHora);
        txtUsuarioModificacion.Text = be.UsuarioModificacion;
        txtFechaModificacion.Text = be.FechaModificacion.ToString(AppSettings.FormatoFechaHora);

        if (pstrAccion == "d")
        {
            Master.MenuAplicar.Visible = false; //Remueve el boton aplicar
            txtDescripcion.Enabled = false;
            ddlTipoCompania.Enabled = false;
            txtCodigoCompania.Enabled = false;
            txtLogo.Enabled = false;
            txtPaginaWeb.Enabled = false;
            cbxAfectoIGV.Enabled = false;
            cbxCreditoFiscal.Enabled = false;
            cbxRetencionIGV.Enabled = false;
            cbxRTPS.Enabled = false;
            cbxGeneral.Enabled = false;

            txtRepresentanteLegal.Enabled = false;
            txtRepresentanteLegalDoc.Enabled = false;
            //cbVigente.Enabled = false;
            ddlEstado.Enabled = false;

            if (be.Estado == Constantes.ESTADO_ACTIVO)
            {
                Util.SelectCombo(ddlEstado, Constantes.ESTADO_INACTIVO);
            }
            else
            {
                Util.SelectCombo(ddlEstado, Constantes.ESTADO_ACTIVO);
            }
        }
        CargarFoto(be.IdCompania);
    }

    protected bool Validar(out WCCompania.BECompania pbe )
    {
        pbe = new WCCompania.BECompania();
        string strCodigoCompania = string.Empty, strDescripcion = string.Empty, strImagen = string.Empty;
        string strUsuario = string.Empty, strEstado = string.Empty;
        string strAccion = string.Empty;
        string strPaginaWeb = string.Empty;
        string strRepresentanteLegal = string.Empty;
        string strRepresentanteLegalDoc = string.Empty;
        string strLogo = string.Empty;
        string strCreditoFiscal = string.Empty;
        string strAfectoIGV = string.Empty;
        string strRetencionIGV = string.Empty;
        string strRTPS = string.Empty;
        string strIdPersona = string.Empty;
        string strTipoCompania = string.Empty;
        string strNemonico = string.Empty;
        string strGeneral = string.Empty;
        string strIdPaisRegistroCompania = string.Empty, strIdDepartamentoRegistroCompania = string.Empty, strIdProvinciaRegistroCompania = string.Empty;
        string strIdPaisRegistroPersona = string.Empty, strIdDepartamentoRegistroPersona = string.Empty, strIdProvinciaRegistroPersona = string.Empty;
        string strFechaRegistroCompania = string.Empty, strTomoRegistroCompania = string.Empty;
        string strFechaRegistroPersona = string.Empty, strTomoRegistroPersona = string.Empty, strIdPersonaLegal = string.Empty;
        
        int lnIdPersona = 0, lnIdCompania = 0;
    
        strAccion = hfAccion.Value; //a: n-Nuevo, e-Editar, v-Ver

        strIdPersona = !string.IsNullOrEmpty(hfIdPersona.Value) ? hfIdPersona.Value : "0";
        strLogo = txtLogo.Text.Trim();
        strCodigoCompania = txtCodigoCompania.Text.Trim();
        strDescripcion = txtDescripcion.Text.Trim();
        strPaginaWeb = txtPaginaWeb.Text.Trim();
        strRepresentanteLegal = txtRepresentanteLegal.Text.Trim();
        strRepresentanteLegalDoc = txtRepresentanteLegalDoc.Text.Trim();
        strAfectoIGV = cbxAfectoIGV.Checked ? "S" : "N";
        strRetencionIGV = cbxRetencionIGV.Checked ? "S" : "N";
        strRTPS = cbxRTPS.Checked ? "S" : "N";
        strCreditoFiscal = cbxCreditoFiscal.Checked ? "S" : "N";
        strTipoCompania = ddlTipoCompania.SelectedValue;
        strIdPaisRegistroCompania = ddlPaisRegistroCompania.SelectedValue;
        strIdDepartamentoRegistroCompania = ddlDepartamentoRegistroCompania.SelectedValue;
        strIdProvinciaRegistroCompania = ddlProvinviaRegistroCompania.SelectedValue;
        strTomoRegistroCompania = txtTomoRegistroCompania.Text;
        strFechaRegistroCompania = txtFechaRegistroCompania.Text.Trim();
        strNemonico = txtNemonico.Text;
        
        //Representante Legal
        strIdPersonaLegal = hfIdPersonaLegal.Value;
        strIdPaisRegistroPersona = ddlPaisRegistroPersona.SelectedValue;
        strIdDepartamentoRegistroPersona = ddlDepartamentoRegistroPersona.SelectedValue;
        strIdProvinciaRegistroPersona = ddlProvinciaRegistroPersona.SelectedValue;
        strTomoRegistroPersona = txtTomoRegistroPersona.Text;
        strFechaRegistroPersona = txtFechaRegistroPersona.Text.Trim();
   
        if (!string.IsNullOrEmpty(Request.Form["confirm_value"]))
        {
            strGeneral = Request.Form["confirm_value"].ToString(); //Recupera el resultado de la confirmación.
        }
        else
        {
            strGeneral = Constantes.ESTADO_NO;
        }       

        strEstado = ddlEstado.SelectedValue;
        strUsuario = UsuarioSistema.CodigoUsuario;

        ////Valida
        //String strReg = @"^[-+]?\d+(\.\d+)?$";
        if (string.IsNullOrEmpty(strIdPersona) || strIdPersona.Equals("0"))
        {
            Util.ejecutaScriptAJAX(this.Page, string.Format("alert('{0}');", Resources.resMensaje.msgAlertaSeleccionarPersona));
            return false;
        }
        int.TryParse(strIdPersona, out lnIdPersona);
        int.TryParse(hfIdCompania.Value, out lnIdCompania);

        //Imagen
        FileUpload img = (FileUpload)fuLogoImagen;
        Byte[] imgByte = null;
        if (img.HasFile && img.PostedFile != null)
        {
            //To create a PostedFile
            HttpPostedFile File = fuLogoImagen.PostedFile;
            //Create byte Array with file len
            imgByte = new Byte[File.ContentLength];
            //force the control to load data in array
            File.InputStream.Read(imgByte, 0, File.ContentLength);
        }
        //Inicializa
        WCCompania.BECompania be = new WCCompania.BECompania
        {
            IdCompania = lnIdCompania,
            IdPersona = lnIdPersona,
            CodigoCompania = strCodigoCompania,
            Descripcion = strDescripcion,
            PaginaWeb = strPaginaWeb,
            Logo = strLogo,
            RepresentanteLegal = strRepresentanteLegal,
            RepresentanteLegalDocumento = strRepresentanteLegalDoc,
            RetencionIGV = strRetencionIGV,
            AfectoIGV= strAfectoIGV,
            RTPS = strRTPS,           
            CreditoFiscal = strCreditoFiscal,
            TipoCompania = strTipoCompania,
            General= strGeneral,
            IdPaisRegistro = Int32.Parse(strIdPaisRegistroCompania),
            IdDepartamentoRegistro = Int32.Parse(strIdDepartamentoRegistroCompania),
            IdProvinciaRegistro = Int32.Parse(strIdProvinciaRegistroCompania),
            FechaRegistro = string.IsNullOrEmpty(strFechaRegistroCompania) ? (DateTime?)null : (DateTime?)Util.ObtenerFechaCadena(strFechaRegistroCompania, AppSettings.FormatoFecha),
            TomoRegistroLegal = strTomoRegistroCompania,
            //IdPersonaLegal = Int32.Parse(strIdPersonaLegal),
            IdPaisRegistroPersona = Int32.Parse(strIdPaisRegistroPersona),
            IdDepartamentoRegistroPersona = Int32.Parse(strIdDepartamentoRegistroPersona),
            IdProvinciaRegistroPersona = Int32.Parse(strIdProvinciaRegistroPersona),
            FechaRegistroPersona = string.IsNullOrEmpty(strFechaRegistroPersona) ? (DateTime?)null : (DateTime?)Util.ObtenerFechaCadena(strFechaRegistroPersona, AppSettings.FormatoFecha),
            TomoRegistroPersona = strTomoRegistroPersona,
            Nemonico = strNemonico,
            Estado = strEstado,
            UsuarioCreacion = strUsuario,
            FechaCreacion = DateTime.Now,
            UsuarioModificacion = strUsuario,
            FechaModificacion = DateTime.Now,
        };

        //Se establece la Foto del Empleado
        if (imgByte != null)
            be.ImagenLogo = imgByte;
        pbe = be;

        //Agregar Campos que pertenecen a persona.
        WCPersona.BEPersona oPer = ObtenerPersona(lnIdPersona);
        be.IdSpring = oPer.IdSpring;
        be.Documento = oPer.DocumentoFiscal;
        be.FechaNacimiento = oPer.FechaNacimiento; 
        be.Telefono1 = oPer.Telefono1;
        be.Telefono2 = oPer.Telefono2;
        be.Telefono3 = oPer.Telefono3;
        be.Fax = oPer.Fax;
       //Direccion
        foreach (var item in ObtenerDireccion(lnIdPersona) )
        {
            if (item.TipoDireccion.Replace(" ","")  == "L")
            {
                be.DescripcionDireccion = item.Direccion;
                be.DireccionReferencia = item.Referencia;
                break;
            }
        }
        /*
            DireccionComun
            DireccionAdicional
            FechaFundacion
            Telefono1
            Telefono2
            Telefono3
            Fax1
            Fax2
            DocumentoFiscal
         */

        txtIdCliente.Text = hfIdPersona.Value;
        txtNombreBusqueda.Text = hfNombrePersona.Value;

        return true;
    }

    protected void Guardar(string pstrEvento) //G:Grabar, A:Aplicar
    {
        string strAccion = string.Empty;
        string strUsuario = string.Empty;

        strAccion = hfAccion.Value; //a: n-Nuevo, e-Editar, v-Ver
        strUsuario = UsuarioSistema.CodigoUsuario;

        WCCompania.BECompania be;
         
        if (!Validar(out be)) //Valida e Inicializa
        {
            return;
        }

        //Grabar
        switch (strAccion)
        {
            case "n": //Nuevo
                be = InsertarCompania(be);
                if (be.Error != 0)
                {
                    Util.ejecutaScriptAJAX(this.Page, string.Format("alert('{0}');", Resources.resMensaje.msgErrorRegistrar));
                }
                hfAccion.Value = "e";
                hfIdCompania.Value = be.IdCompania.ToString();
                txtIdCompania.Text = be.IdCompania.ToString();
              
                txtUsuarioCreacion.Text = strUsuario;
                txtFechaCreacion.Text = be.FechaCreacion.ToString(AppSettings.FormatoFechaHora);
                txtUsuarioModificacion.Text = strUsuario;
                txtFechaModificacion.Text = be.FechaCreacion.ToString(AppSettings.FormatoFechaHora);
                CargarFoto(be.IdCompania); 
                
                break;
            case "e": //Actualiza
                be = ActualizarCompania(be);
                if (be.Error != 0)
                {
                    Util.ejecutaScriptAJAX(this.Page, string.Format("alert('{0}');", Resources.resMensaje.msgErrorActualizar));
                }
                txtUsuarioModificacion.Text = strUsuario;
                txtFechaModificacion.Text = be.FechaModificacion.ToString(AppSettings.FormatoFechaHora);
                CargarFoto(be.IdCompania); 

                break;
            case "d": //Elimina
                be = EliminaCompania(be);
                txtUsuarioModificacion.Text = strUsuario;
                txtFechaModificacion.Text = be.FechaModificacion.ToString(AppSettings.FormatoFechaHora);

                if (be.Error != 0)
                {
                    Util.ejecutaScriptAJAX(this.Page, string.Format("alert('{0}');", Resources.resMensaje.msgErrorActualizar));
                }
                break;
        }
        if (pstrEvento == "G") { if (be.Error == 0) { Salir(); } }
    }

    protected void Salir()
    {
        string strCadena = string.Format("?a=l&param1={0}", Request.QueryString["param1"]);
        Util.Redireciona(RUTA_LISTA, strCadena, true);
    }


    #endregion

    #region LLAMDAS A WEBSERVICES

    /// <summary>
    /// Método Inserta 
    /// </summary>
    /// <returns>Devuelve un DataSet</returns>
    protected WCCompania.BECompania InsertarCompania(WCCompania.BECompania pbe)
    {
        WCCompania.BECompania be = new WCCompania.BECompania();
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCCompania.IWCCompania>("BasicHttpBinding_IWCCompania"))
        {
            var response = client.ServiceOperation<WCCompania.BECompania>(
               c => c.Insertar(pbe)
               );
            ;
            be = response;
        }
        return be;
    }

    /// <summary>
    /// Método Obtiene 
    /// </summary>
    /// <returns>Devuelve un Objeto</returns>
    protected WCCompania.BECompania ObtenerCompania(WCCompania.BECompania pbe)
    {
        WCCompania.BECompania be = new WCCompania.BECompania();
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCCompania.IWCCompania>("BasicHttpBinding_IWCCompania"))
        {
            var response = client.ServiceOperation<WCCompania.BECompania>(
               c => c.Obtener(pbe)
               );
            ;
            be = response;
        }
        return be;
    }

    /// <summary>
    /// Método Actualiza 
    /// </summary>
    /// <returns>Devuelve un DataSet</returns>
    protected WCCompania.BECompania ActualizarCompania(WCCompania.BECompania pbe)
    {
        WCCompania.BECompania be = new WCCompania.BECompania();
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCCompania.IWCCompania>("BasicHttpBinding_IWCCompania"))
        {
            var response = client.ServiceOperation<WCCompania.BECompania>(
               c => c.Actualizar(pbe)
               );
            ;
            be = response;
        }
        return be;
    }

    /// <summary>
    /// Método Elimina
    /// </summary>
    /// <returns>Devuelve un DataSet</returns>
    protected WCCompania.BECompania EliminaCompania(WCCompania.BECompania pbe)
    {
        WCCompania.BECompania be = new WCCompania.BECompania();
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCCompania.IWCCompania>("BasicHttpBinding_IWCCompania"))
        {
            var response = client.ServiceOperation<WCCompania.BECompania>(
               c => c.Eliminar(pbe)
               );
            ;
            be = response;
        }
        return be;
    }



    /// <summary>
    /// Método Lista Datos de ParametroDetalle
    /// </summary>
    /// <returns>Devuelve un dataTable</returns>
    protected DataTable ListarParametroDetalle(int pintidCompania, int pintIdAplicacion, string pstrParametro)
    {
        WCParametroDetalle.BEParametroDetalle be = new WCParametroDetalle.BEParametroDetalle();
        be.IdCompania = pintidCompania;
        be.IdAplicacion = pintIdAplicacion;
        be.Parametro = pstrParametro;
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCParametroDetalle.IWCParametroDetalle>("BasicHttpBinding_IWCParametroDetalle"))
        {
            var response = client.ServiceOperation<DataTable>(c => c.Listar(be).Tables[0]);
            dt = response;
        }
        return dt;
    }

    /// <summary>
    /// Método Lista Datos de Pais
    /// </summary>
    /// <returns>Devuelve un dataTable</returns>
    protected DataTable ListarPais()
    {
        WCPais.BEPais be = new WCPais.BEPais();
        be.Estado = "A";

        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCPais.IWCPais>("BasicHttpBinding_IWCPais"))
        {
            var response = client.ServiceOperation<DataTable>(c => c.Listar_Sel(be).Tables[0]);
            dt = response;
        }
        return dt;
    }


    ///<summary>
    ///Método Lista Datos de Departamentos por Pais
    ///</summary>
    ///<returns>Devuelve un dataTable</returns>
    protected DataTable ListarDepartamentos(int pintIdPais)
    {
        WCDepartamento.BEDepartamento be = new WCDepartamento.BEDepartamento();
        be.IdPais = pintIdPais;
        be.CodigoDepartamento = string.Empty;
        be.CodigoRTPS = string.Empty;
        be.Descripcion = string.Empty;
        be.Estado = Constantes.ESTADO_ACTIVO;

        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCDepartamento.IWCDepartamento>("BasicHttpBinding_IWCDepartamento"))
        {
            var response = client.ServiceOperation<DataTable>(c => c.ListarPorPais(be).Tables[0]);
            dt = response;
        }
        return dt;
    }

    ///<summary>
    ///Método Lista Datos de Departamentos por Pais
    ///</summary>
    ///<returns>Devuelve un dataTable</returns>
    protected DataTable ListarProvincias(int pintIdDepartamento)
    {
        WCProvincia.BEProvincia be = new WCProvincia.BEProvincia();
        be.IdDepartamento = pintIdDepartamento;
        be.Estado = Constantes.ESTADO_ACTIVO;

        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCProvincia.IWCProvincia>("BasicHttpBinding_IWCProvincia"))
        {
            var response = client.ServiceOperation<DataTable>(c => c.ListarPorDepartamento(be).Tables[0]);
            dt = response;
        }
        return dt;
    }


    /// <summary> 
    /// Método Lista Datos de Cliente 
    /// </summary> 
    /// <returns>Devuelve un dataTable</returns> 
    protected WCPersona.BEPersona ObtenerPersona(int pinIdPersona)
    {
        WCPersona.BEPersona be = new WCPersona.BEPersona();
        be.IdPersona = pinIdPersona;
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCPersona.IWCPersona>("BasicHttpBinding_IWCPersona"))
        {
            var response = client.ServiceOperation<WCPersona.BEPersona>(c => c.Obtener(be));
            be = response;
        }
        return be;
    }


    protected WCDireccion.BEDireccion[] ObtenerDireccion(int pinIdPersona)
    {
        WCDireccion.BEDireccion be = new WCDireccion.BEDireccion();
        be.IdPersona = pinIdPersona;
        be.Estado = Constantes.ESTADO_ACTIVO;
        be.Pagina = 0;
        WCDireccion.BEDireccion[] LstBe = null;
        using (var client = new ServiceClient<WCDireccion.IWCDireccion>("BasicHttpBinding_IWCDireccion"))
        {
            var response = client.ServiceOperation<WCDireccion.BEDireccion[]>(c => c.Listar(be));
            LstBe = response;
        }
        return LstBe;
    }


    #endregion

}